#ifndef REDIS_HPP
#define REDIS_HPP

#include <iostream>
#include <string>
#include <thread>
#include <functional>
#include <hiredis/hiredis.h>

class Redis
{
public:

      Redis();
      ~Redis();
      //连接redis缓存
      bool connect();
      //对于链接后的操作
      bool subscribe(int channel);
      bool unsubscribe(int channel);
      bool publish(int channel,std::string message);

      //在独立线程中查看信息，因为redis接受信息是阻塞的，所以必须单开一个线程查看信息
      void observer_receive_message();
      //注册回调函数接收消息(所以这个参数应该得是一个函数对象)
      void init_notify_handler(std::function<void(int,std::string)> fn);

private:

      redisContext* _publish;
      redisContext* _subscribe;
      
      std::function<void(int,std::string)> _initNotifyHandler;
};


#endif